home *** CD-ROM | disk | FTP | other *** search
/ BCI NET 2 / BCI NET 2.iso / archives / programming / c / hce.lha / HCE / LibSource / clib / Stdio / src / fgetc.c < prev    next >
Encoding:
C/C++ Source or Header  |  1992-09-02  |  748 b   |  41 lines

  1. #include <stdio.h>
  2.  
  3. int fgetc(fp)
  4.     register FILE *fp;
  5.     {
  6.     register int c, f, m;
  7.  
  8.     f = (fp->_flag &= ~_IORW);
  9.     if(!(f & _IOREAD) || (f & (_IOERR | _IOEOF)))
  10.         return(EOF);
  11.     if(fp->_base == NULL)    /* allocate a buffer if there wasn't one */
  12.         _getbuf(fp);
  13. _fgetc1:
  14.     if(--(fp->_cnt) < 0)
  15.         {
  16.         m = read(fp->_file, fp->_base, fp->_bsiz);
  17.         if(m <= 0)
  18.             {
  19.             fp->_flag |= ((m == 0) ? _IOEOF : _IOERR);
  20.             c = EOF;
  21.             goto _fgetc2;
  22.             }
  23.         fp->_cnt = (m - 1);
  24.         fp->_ptr = fp->_base;
  25.         }
  26.     c = *(fp->_ptr)++;
  27. _fgetc2:
  28.     return(c);
  29.     }
  30.  
  31. int fungetc(c, fp)
  32.     char c;
  33.     register FILE *fp;
  34.     {
  35.     if((fp->_flag & (_IOERR | _IOEOF))    /* error or eof */
  36.     || (fp->_ptr <= fp->_base))        /* or too many ungets */
  37.         return(EOF);
  38.     ++(fp->_cnt);
  39.     return(*--(fp->_ptr) = c);
  40.     }
  41.